Разработка ядра CUDA начинается с определения ядра, которое представляет собой специализированную функцию на языке C++, предназначенную для параллельного выполнения на большом количестве ядер NVIDIA GPU. Эти функции представляют собой базовую единицу работы в модели программирования CUDA, выступая в качестве моста, где последовательная логика хоста переходит в массово-параллельное выполнение на устройстве.
1. Указатель __global__
Указатель __global__ объявления является обязательным параметром интерфейса, который указывает компилятору генерировать код для GPU, при этом оставляя точку входа функции доступной для процессора. Функции, выполняемые на GPU и вызываемые с хоста, называются ядрами.
2. Среда выполнения
Ядра направляются к и выполняются на потоковых многопроцессорах (SM). SM — это основной вычислительный блок внутри видеокарты NVIDIA, отвечающий за управление сотнями одновременно выполняющихся потоков. Каждый SM обрабатывает блоки потоков и распределяет их на вычислительные ядра.
Правило синтаксиса: Ядра должны строго возвращать void. Поскольку они работают асинхронно относительно хоста, они не могут напрямую вернуть значение процессору; результаты должны быть записаны обратно в выделенную память устройства.